﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Music;
using Logic;

namespace Music_5
{
    //partial - для компилятора, чтобы он знал что есть части этого класса в другом файле
    public partial class Form1 : Form
    {
        List<AbstractMusic> Album = new List<AbstractMusic>();
        Creator creator;

        //конструктор формы
        public Form1()
        {
            //метод поддержки конструктора
            InitializeComponent();
            Studio studio = new Studio();
            Album = studio.CreateAlbum();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
          //  error.Visible = false;
        }

        //выход из программы
        private void Exit_Click(object sender, EventArgs e)
        {
            System.Environment.Exit(0);
        }

        private void Add_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            string Performer = "default";
            string Title = "default";
            int LengthMin = 0;
            int LengthSec = 0;
            try
            {
                Performer = Convert.ToString(textBox1.Text);
                Title = Convert.ToString(textBox2.Text);
                LengthMin = Convert.ToInt32(textBox3.Text);
                LengthSec = Convert.ToInt32(textBox4.Text);
                if ((LengthMin > 0) && (LengthMin < 60) && (LengthSec > 0) && (LengthSec < 60))
                {
                    switch (comboBox1.SelectedItem.ToString())
                    {
                        case "Orchestra":
                            creator = new OrchestraCreator();
                            Album.Add(creator.FactoryMethod(Performer, Title, LengthMin, LengthSec));
                            listBox1.Items.Add("Добавлен трек.");
                            break;
                        case "Jazz":
                            creator = new JazzCreator();
                            Album.Add(creator.FactoryMethod(Performer, Title, LengthMin, LengthSec));
                            listBox1.Items.Add("Добавлен трек.");
                            break;
                        case "Hip-Hop":
                            creator = new Hip_HopCreator();
                            Album.Add(creator.FactoryMethod(Performer, Title, LengthMin, LengthSec));
                            listBox1.Items.Add("Добавлен трек.");
                            break;
                        case "R&B":
                            creator = new R_and_BCreator();
                            Album.Add(creator.FactoryMethod(Performer, Title, LengthMin, LengthSec));
                            listBox1.Items.Add("Добавлен трек.");
                            break;
                        case "Rock":
                            creator = new RockCreator();
                            Album.Add(creator.FactoryMethod(Performer, Title, LengthMin, LengthSec));
                            listBox1.Items.Add("Добавлен трек.");
                            break;
                        case "Ensemble":
                            creator = new EnsembleCreator();
                            Album.Add(creator.FactoryMethod(Performer, Title, LengthMin, LengthSec));
                            listBox1.Items.Add("Добавлен трек.");
                            break;
                        case "Solo":
                            creator = new SoloCreator();
                            Album.Add(creator.FactoryMethod(Performer, Title, LengthMin, LengthSec));
                            listBox1.Items.Add("Добавлен трек.");
                            break;
                        case "Soul":
                            creator = new SoulCreator();
                            Album.Add(creator.FactoryMethod(Performer, Title, LengthMin, LengthSec));
                            listBox1.Items.Add("Добавлен трек.");
                            break;
                    }
                }

                else
                {
                    error.Visible = true;
                    error.Text = "Укажите значения минут и секунд в пределах от 1 до 60!";
                }
            }

            catch (FormatException)
            {
                error.Visible = true;
                error.Text = "Некорректный ввод!";
            }
            catch (Exception)
            {
                listBox1.Items.Clear();
                listBox1.Items.Add("Выберите элемент для добавления и укажите данные");
            }
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        //Очистка списка
        private void Clear_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            listBox1.Items.Add("Cписок очищен");
            Album.Clear();
        }

        //Вывод списка
        private void Show_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            int counter = 1;
            if (Album.Count != 0)
            {
                listBox1.Items.Add("Список:");
                foreach (AbstractMusic track in Album)
                {
                    listBox1.Items.Add(counter + ". " + track.Performer + " - " + track.Title + " (" + track.LengthMin + ":" + track.LengthSec + ")");
                    counter++;
                }
            }
            else
                listBox1.Items.Add("Список пуст!");
        }

        //Подсчет количества треков в альбоме
        private void CountTracks_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            listBox1.Items.Add("Количество треков в альбоме: " + Album.Count);
        }

        //Подсчет общей продолжительности треков
        private void CountLength_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            Counter counter = new Counter();
            int s = counter.Count(Album);
            int m = s / 60;
            s = s % 60;
            listBox1.Items.Add("Общая продолжительность треков: " + m + " минут и " + s + " секунд");
        }

        //Удаление элемента из списка
        private void Delete_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            int index;
            try
            {
                index = Convert.ToInt32(textBox5.Text);
                if (Album.Count != 0)
                {
                    if ((0 < index) && (index <= Album.Count))
                    {
                        listBox1.Items.Add("Удален трек под номером: " + index);
                        Album.RemoveAt(index - 1);

                    }
                    else
                    {
                        error.Visible = true;
                        if (Album.Count != 0)
                        {
                            error.Text = "Укажите индекс в пределах от 1 до " + Album.Count;
                        }
                    }
                }
                else
                {
                    error.Visible = true;
                    error.Text = "Список пуст, нет элементов для удаления";
                }
            }
            catch (FormatException)
            {
                error.Visible = true;
                error.Text = "Некорректный ввод";
            }
            catch (Exception)
            {
                listBox1.Items.Clear();
                listBox1.Items.Add("Выберите номер трека для удаления");
            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            error.Visible = false;
        }



    }
}
